package com.ruoyi.yuce.service.impl;

import com.ruoyi.yuce.domain.Echarts;
import com.ruoyi.yuce.domain.FaultRecord;
import com.ruoyi.yuce.domain.pojo.Piechart;
import com.ruoyi.yuce.domain.pojo.StatisticsVo;
import com.ruoyi.yuce.mapper.JYTZMapper;
import com.ruoyi.yuce.service.IJYTZService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@Service
public class JYTZServiceImpl implements IJYTZService
{
    @Autowired
    private JYTZMapper jytzMapper;

    @Override
    public int getFaultRecordNum(String riqi)
    {
        return jytzMapper.getFaultRecordNum(riqi);
    }

    @Override
    public List<FaultRecord> getPartsRankList(FaultRecord faultRecord) {
        return jytzMapper.getPartsRankList(faultRecord);
    }

    @Override
    public List<FaultRecord> getContentRankList(FaultRecord faultRecord) {
        return jytzMapper.getContentRankList(faultRecord);
    }

    @Override
    public Map<String,Object> getBrokenLine(String year){

        //根据条件查询折线图中对应数据
        List<FaultRecord> staList = jytzMapper.selectBrokenLineList(year);

        //因为返回有两部分数据：日期 和 日期对应数量
        //前端要求数组json结构，对应后端java代码是list集合
        //创建两个list集合，一个日期list，一个数量list
        List<String> monthList = new ArrayList<>();
        List<StatisticsVo> numList = new ArrayList<>();

        //创建需要展示类型的对象，对应2023年故障的统计
        StatisticsVo statisticsVo = new StatisticsVo();
        //创建list集合，分别存储2023年故障的统计数量
        List<Integer> dataNum = new ArrayList<>();

        //遍历查询所有数据list集合，进行封装
        for (int i = 0; i < staList.size(); i++) {
            FaultRecord daily = staList.get(i);
            //封装月份list集合
            monthList.add(daily.getFaultmonth());
            //封装对应数量
            dataNum.add(daily.getFaultnum());

        }
        //将2023年对应数据添加到数量list进行封装
        statisticsVo.setName("2023年故障");
        statisticsVo.setData(dataNum);
        numList.add(statisticsVo);


        //把封装之后两个list集合放到map集合，进行返回
        Map<String, Object> map = new HashMap<>();
        map.put("xAxis",monthList);
        map.put("series",numList);
        return map;
    }

    @Override
    public Map<String,Object> getAllYearBrokenLine(){

        //根据条件查询折线图中对应数据
        List<FaultRecord> staList = jytzMapper.selectAllYearBrokenLineList();

        //因为返回有两部分数据：日期 和 日期对应数量
        //前端要求数组json结构，对应后端java代码是list集合
        //创建两个list集合，一个日期list，一个数量list
        List<String> monthList = new ArrayList<>();
        List<StatisticsVo> numList = new ArrayList<>();

        //创建需要展示类型的对象，对应故障的统计
        StatisticsVo statisticsVo2020 = new StatisticsVo();
        StatisticsVo statisticsVo2021 = new StatisticsVo();
        StatisticsVo statisticsVo2022 = new StatisticsVo();
        StatisticsVo statisticsVo2023 = new StatisticsVo();

        //创建list集合，分别存储2023年故障的统计数量
        List<Integer> dataNum2020 = new ArrayList<>();
        List<Integer> dataNum2021 = new ArrayList<>();
        List<Integer> dataNum2022 = new ArrayList<>();
        List<Integer> dataNum2023 = new ArrayList<>();
        //遍历查询所有数据list集合，进行封装
        for (int i = 0; i < staList.size(); i++) {
            FaultRecord daily = staList.get(i);
            //封装月份list集合
            monthList.add(daily.getFaultmonth());
            //封装对应数量
            dataNum2020.add(daily.getFaultnum2020());
            dataNum2021.add(daily.getFaultnum2021());
            dataNum2022.add(daily.getFaultnum2022());
            dataNum2023.add(daily.getFaultnum2023());
        }
        //将2023年对应数据添加到数量list进行封装
        statisticsVo2020.setName("2020年故障");
        statisticsVo2020.setData(dataNum2020);
        numList.add(statisticsVo2020);

        statisticsVo2021.setName("2021年故障");
        statisticsVo2021.setData(dataNum2021);
        numList.add(statisticsVo2021);

        statisticsVo2022.setName("2022年故障");
        statisticsVo2022.setData(dataNum2022);
        numList.add(statisticsVo2022);

        statisticsVo2023.setName("2023年故障");
        statisticsVo2023.setData(dataNum2023);
        numList.add(statisticsVo2023);

        //把封装之后两个list集合放到map集合，进行返回
        Map<String, Object> map = new HashMap<>();
        map.put("xAxis",monthList);
        map.put("series",numList);
        return map;
    }

    @Override
    public Map<String,Object> getPieChart(){

        //根据条件查询折线图中对应数据
        List<FaultRecord> staList = jytzMapper.getPieChart();

        String nameList;
        Integer valueList;
        Map<String, Object> map = new HashMap<>();
        //创建需要展示类型的对象，对应故障的统计
        List<Piechart> pieList = new ArrayList<>();
        //遍历查询所有数据list集合，进行封装
        for (int i = 0; i < staList.size(); i++) {
            FaultRecord daily = new FaultRecord();
            daily = staList.get(i);
            //封装月份list集合
            nameList = daily.getFaultcontent();
            valueList = daily.getFaultnum();
            Piechart echarts = new Piechart();
            echarts.setName(nameList);
            echarts.setValue(valueList);
            pieList.add(echarts);
        }
        map.put("series",pieList);
        return map;
    }
}
